/* ********************************
 * @Author: zhengshizeng@126.com
 * @Date: 2023-11-22 15:03:25
 * ********************************/

#ifndef __CJSONCONFIGZ_H__Z_
#define __CJSONCONFIGZ_H__Z_

#include "json/json.h"
#include <fstream>
#include <string>

// 使用JSONCPP 类,管理配置文件
// 创建个单例,配置文件全局使用
using namespace std;

class cjsonconfigz {
public:
    cjsonconfigz(const cjsonconfigz &) = delete;
    cjsonconfigz &operator=(const cjsonconfigz &) = delete;

    static cjsonconfigz &Instance(); // 单例
private:
    cjsonconfigz();
    void SaveJsonFile();
    // 保存JSON数据
    Json::Value m_jsondata;
    Json::Value m_defaultjson;
    string m_configFile;

public:
    void InitCfgFile(string filename);

    void SetdefultCFG(string skey, string svalue);
    void SetdefultCFG(string skey, int ivalue);

    string getStringbyKey(string skey);
    int getIntbyKey(string skey);

    Json::Value getArraybyKey(string skey);
    void setArrayKey(string skey, Json::Value array);

    int SaveValuebyKey(string skey, string svalue, bool bstr = false);
    // 获取配置信息中的某个值，如果该值不存在则返回默认值
    // template <typename T>
    // T getValue(const std::string &key, const T &defaultValue) const {
    //     if (m_jsondata.isMember(key)
    //         && m_jsondata[key].isConvertibleTo(
    //             Json::ValueType::valueTypeToEnum(Json::ValueType::IsConvertible<T>::value))) {
    //         return m_jsondata[key].as<T>();
    //     } else {
    //         return defaultValue;
    //     }
    // }
};

#endif // __CJSONCONFIGZ_H__Z_